package com.itheima;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * @Author: taku
 * @CreateTime: 2020-05-04 20:34
 * @Description: 切面配置类类
 */
// 声明为切面
@Aspect
// 一定要加component
@Component
public class AspectConfig {
    // 切点
    @Pointcut("execution(* com.itheima.service..*.*(..))")
//    @Pointcut("execution(* com.itheima.service.Service.show())")
    public void pps(){}
    // 环绕通知
    @Around("pps()")
    public Object arrou(ProceedingJoinPoint pjp) {

        Object rtValue = null;
        try{
            Object[] args = pjp.getArgs();//得到方法执行所需的参数

            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。前置");

            rtValue = pjp.proceed(args);//明确调用业务层方法（切入点方法）

            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。后置");

            return rtValue;
        }catch (Throwable t){
            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。异常");
            throw new RuntimeException(t);
        }finally {
            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。最终");
        }
    }
}
